package ar.com.larreta.colegio.entidades;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.commons.lang.StringUtils;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

import ar.com.larreta.comunes.Propiedades;
import ar.com.larreta.entidades.Entidad;
import ar.com.larreta.procesos.AdministradorDeProcesos;
import ar.com.larreta.utilidades.UtilidadesNumeros;

@Entity
@Table(name = "detalleespecifico")
// Borrado logico
@SQLDelete (sql="UPDATE DetalleEspecifico SET fechaEliminacion=CURRENT_TIMESTAMP WHERE ID=?")
// Solamente trae los que no fueron borrados logicamente
@Where(clause="fechaEliminacion IS NULL")
public class DetalleEspecifico extends Entidad implements Comparable<DetalleEspecifico>{
	
	public static final String FORMATO_NUMERICO = "formato.numerico";
	public static final String SIMBOLO_MONETARIO = "simbolo.monetario";

	private Long id;
	private String nombre;
	private Double valor;
	
	private Detalle detalle;
	
	@ManyToOne (fetch=FetchType.LAZY)
	@JoinColumn (name="idDetalle")		
	public Detalle getDetalle() {
		return detalle;
	}

	public void setDetalle(Detalle detalle) {
		this.detalle = detalle;
	}

	@Id @GeneratedValue(strategy=GenerationType.AUTO)
	public Long getId() {
		return id;
	}
	
	public void setId(Long id) {
		this.id = id;
	}
	
	@Basic @Column (name="nombre")
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	@Transient
	public String getValorConFormato(){
		if (valor==null){
			return StringUtils.EMPTY;
		}
		Propiedades propiedadesDeConfiguracionDeLaAplicacion = AdministradorDeProcesos.getInstancia(null).getPropiedades();
		return propiedadesDeConfiguracionDeLaAplicacion.getProperty(SIMBOLO_MONETARIO) + 
				UtilidadesNumeros.transformarNumeroATexto(valor, propiedadesDeConfiguracionDeLaAplicacion.getProperty(FORMATO_NUMERICO));
	}
	
	@Basic @Column (name="valor")
	public Double getValor() {
		return valor;
	}
	public void setValor(Double valor) {
		this.valor = valor;
	}

	public int compareTo(DetalleEspecifico detalleEspecifico) {
		return this.nombre.compareTo(detalleEspecifico.getNombre());
	}


}
